home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / misc / poolfx92.lzh / POOLFIX4.S < prev    next >
Text File  |  1992-03-04  |  10KB  |  626 lines

  1. ;File name:    POOLFIX4.S        Revision date:    1992.03.03
  2. ;Revised by:    Ulf Ronald Andersson    Disassembled:    1992.03.03
  3. ;
  4. ;
  5.     include    TOS\URAn_SYS.S
  6.     include    TOS\URAn_DOS.S
  7.     include    TOS\URAn_XB.S
  8. ;
  9. ;
  10.     text
  11. ;
  12. ;
  13. L0:
  14.     move.l    4(sp),a6
  15.     move.l    a6,basepage_p
  16.     clr.l    -(sp)
  17.     move    #$20,-(sp)
  18.     trap    #1
  19. ;NB: ERROR of POOLFIX3, returned SSP is ignored here
  20. ;NB: This may not work in all TOS versions
  21.     gemdos    Sversion
  22.     lea    not_needed_s(pc),a0
  23.     cmp    #$1500,d0
  24.     bne    error_exit
  25.     lea    strange_TOS_s(pc),a0
  26.     move.l    (_sysbase).w,a1
  27.     move    2(a1),d0
  28.     cmp    #$104,d0        ;TOS 1.04 ?
  29.     beq.s    L40
  30.     cmp    #$106,d0        ;TOS 1.06 ?
  31.     bne    error_exit
  32. L40:
  33.     clr.l    -(sp)
  34.     move.l    #'_OOL',-(sp)
  35.     bsr    find_cookie        ;test for own 'cookie'
  36.     addq.l    #4,sp
  37.     lea    already_in_s(pc),a0
  38.     tst    d0
  39.     bne    error_exit
  40.     lea    bad_linkage_s(pc),a0
  41.     bsr    find_os_gemdos
  42.     tst.l    d0
  43.     bmi    error_exit
  44.     lea    strange_TOS_s(pc),a0
  45.     cmpi    #$2EBC,-1796(a2)
  46.     bne    error_exit
  47.     cmpi    #$2A79,-1102(a2)
  48.     bne    error_exit
  49.     clr.l    -(sp)
  50.     move.l    sp,a5
  51.     move.l    a5,-(sp)
  52.     clr.l    -(sp)
  53.     bsr    find_cookie        ;test for free 'cookie'
  54.     addq.l    #4,sp
  55.     addq.l    #8,(a5)
  56.     move.l    (a5),-(sp)
  57.     move.l    24(a6),d0
  58.     add.l    28(a6),d0
  59.     move.l    d0,-(sp)
  60.     clr.l    -(sp)
  61.     move.l    #'_OOL',-(sp)
  62.     bsr    place_cookie
  63.     adda    #$10,sp
  64.     moveq    #0,d7
  65.     tst    d0
  66.     bmi.s    LB6
  67.     beq.s    LB6
  68.     move.l    (a5),d7
  69.     asl.l    #3,d7
  70. LB6:
  71.     bsr.s    find_os_gemdos
  72.     move.l    a2,a1
  73.     move.l    -1794(a1),a2
  74.     move.l    a2,L69C
  75.     move.l    a2,L694
  76.     addq.l    #4,a2
  77.     move.l    a2,L698
  78.     move.l    -1100(a1),L6A0
  79.     move.l    (ev_gemdos).w,8+nugemdos
  80.     move.l    #12+nu_gemdos,(ev_gemdos).w
  81.     lea    installed_s(pc),a0
  82.     bsr.s    Cconws_a0
  83.     move.l    24(a6),d0
  84.     add.l    28(a6),d0
  85.     add.l    d7,d0
  86.     sub.l    a6,d0
  87.     gemdos    Ptermres,d0,!
  88. ;
  89. ;
  90. error_exit:
  91.     bsr.s    Cconws_a0
  92.     lea    crlf_s(pc),a0
  93.     bsr.s    Cconws_a0
  94.     pea    $4C0001.l
  95.     trap    #1
  96.     dc.b    'J',$FC    ;    dc.w    $4AFC
  97. ;
  98. ;
  99. Cconws_a0:
  100.     gemdos    Cconws,(a0)
  101.     rts
  102. ;
  103. ;
  104. find_os_gemdos:
  105.     movem.l    d1-d1/a1-a1,-(sp)
  106.     moveq    #0,d0
  107.     move.l    (ev_gemdos).w,a2
  108. L130:
  109.     cmpi.l    #'XBRA',-12(a2)
  110.     bne.s    L140
  111.     move.l    -4(a2),a2
  112.     bra.s    L130
  113. ;
  114. L140:
  115.     move.l    a2,d1
  116.     and.l    #$FFFFFF,d1
  117.     move.l    (_sysbase).w,a1
  118.     move.l    8(a1),a1
  119.     sub.l    a1,d1
  120.     bmi.s    L15C
  121.     cmp.l    #$20000,d1
  122.     bmi.s    L15E
  123. L15C:
  124.     moveq    #-1,d0
  125. L15E:
  126.     movem.l    (sp)+,d1-d1/a1-a1
  127.     rts
  128. ;
  129. ;
  130. installed_s:
  131.     dc.b    'POOL PATCH OF 19-JAN-90 INSTALLED.',CR,LF
  132.     dc.b    'Improved 27-MAR-90 by Claus Brod
  133. crlf_s:
  134.     dc.b    CR,LF,NUL
  135. already_in_s:
  136.     dc.b    'Pool patch already installed.',NUL
  137. not_needed_s:
  138.     dc.b    'Pool patch not needed in this TOS',NUL
  139. bad_linkage_s:
  140.     dc.b    'Something linked into the GEMDOS trap',CR,LF
  141.     dc.b    'without following XBRA rules.',CR,LF,NUL
  142. strange_TOS_s:
  143.     dc.b    'POOLFIX4 doesn't recognize this TOS.',NUL
  144.     even
  145. ;
  146. ;
  147.     XB_define    nu_gemdos,'_OOL'
  148.     tst.b    poolfix_flag
  149.     beq.s    L26E
  150.     bsr.s    compact_all_sub
  151. L26E:
  152.     move    USP,a0
  153.     btst    #5,(sp)
  154.     beq.s    L282
  155.     lea    6(sp),a0
  156.     tst    (_longframe).w
  157.     beq.s    L282
  158.     addq    #2,a0
  159. L282:
  160.     move    (a0),d0    ;Pterm0 ?
  161.     beq.s    L294
  162.     sub    #$31,d0    ;Ptermres ?
  163.     beq.s    L294
  164.     sub    #$18,d0    ;Mfree ?
  165.     beq.s    L294
  166.     subq    #3,d0    ;Pterm
  167. NB: Error of POOLFIX3: Mshrink is ignored !!!
  168. NB: Yet, it too can free RAM for compaction
  169. L294:
  170.     seq    poolfix_flag
  171.     move.l    8+nugemdos(pc),a0
  172.     jmp    (a0)
  173. ;
  174. ;
  175. compact_all_sub:
  176.     link    a6,#0
  177.     movem.l    d2-d7/a3-a5,-(sp)
  178.     suba.l    a5,a5
  179.     move.l    L6A0(pc),a0
  180.     move.l    (a0),a4
  181.     clr    d3
  182.     bra.s    L2FA
  183. ;
  184. L2B4:
  185.     tst.b    4(a4)
  186.     ble.s    L2F8
  187.     clr    d4
  188.     clr    d5
  189.     lea    6(a4),a3
  190.     bra.s    L2DE
  191. ;
  192. L2C4:
  193.     cmpi.l    #1,12(a3)
  194.     bne.s    L2D8
  195.     addq    #1,d4
  196.     move.l    a5,d0
  197.     bne.s    L2D8
  198.     move.l    a4,a5
  199.     move    d5,d6
  200. L2D8:
  201.     addq    #1,d5
  202.     adda    #$10,a3
  203. L2DE:
  204.     cmp    #4,d5
  205.     blt.s    L2C4
  206.     cmp    #4,d4
  207.     bne.s    L2F6
  208.     clr.b    4(a4)
  209.     cmp.l    a4,a5
  210.     bne.s    L2F4
  211.     suba.l    a5,a5
  212. L2F4:
  213.     bra.s    L2F8
  214. ;
  215. L2F6:
  216.     add    d4,d3
  217. L2F8:
  218.     move.l    (a4),a4
  219. L2FA:
  220.     move.l    a4,d0
  221.     bne.s    L2B4
  222.     cmp    #4,d3
  223.     blt    L4B4
  224.     move.l    a5,a4
  225.     move    d6,d7
  226. L30A:
  227.     addq    #1,d7
  228.     cmp    #4,d7
  229.     beq.s    L318
  230.     tst.b    4(a4)
  231.     bgt.s    L31C
  232. L318:
  233.     clr    d7
  234.     move.l    (a4),a4
  235. L31C:
  236.     move.l    a4,d0
  237.     beq.s    L33A
  238.     tst.b    4(a4)
  239.     ble.s    L30A
  240.     move    d7,d0
  241.     ext.l    d0
  242.     asl.l    #4,d0
  243.     add.l    a4,d0
  244.     move.l    d0,a0
  245.     cmpi.l    #1,18(a0)
  246.     beq.s    L30A
  247. L33A:
  248.     bra    L4AA
  249. ;
  250. L33E:
  251.     bra.s    L3A8
  252. ;
  253. L340:
  254.     lea    6(a5),a3
  255.     cmpi.l    #1,12(a3)
  256.     bne.s    L3AC
  257.     cmpi.l    #1,28(a3)
  258.     bne.s    L3AC
  259.     cmpi.l    #1,44(a3)
  260.     bne.s    L3AC
  261.     cmpi.l    #1,60(a3)
  262.     bne.s    L3AC
  263.     clr.b    4(a5)
  264.     moveq    #3,d6
  265. L372:
  266.     addq    #1,d6
  267.     cmp    #4,d6
  268.     beq.s    L380
  269.     tst.b    4(a5)
  270.     bgt.s    L384
  271. L380:
  272.     clr    d6
  273.     move.l    (a5),a5
  274. L384:
  275.     move.l    a5,d0
  276.     beq.s    L3A2
  277.     tst.b    4(a5)
  278.     ble.s    L372
  279.     move    d6,d0
  280.     ext.l    d0
  281.     asl.l    #4,d0
  282.     add.l    a5,d0
  283.     move.l    d0,a0
  284.     cmpi.l    #1,18(a0)
  285.     bne.s    L372
  286. L3A2:
  287.     move.l    a5,d0
  288.     beq    L4B4
  289. L3A8:
  290.     tst    d6
  291.     beq.s    L340
  292. L3AC:
  293.     bra.s    L412
  294. ;
  295. L3AE:
  296.     lea    6(a4),a3
  297.     cmpi.l    #1,12(a3)
  298.     beq.s    L416
  299.     cmpi.l    #1,28(a3)
  300.     beq.s    L416
  301.     cmpi.l    #1,44(a3)
  302.     beq.s    L416
  303.     cmpi.l    #1,60(a3)
  304.     beq.s    L416
  305.     moveq    #3,d7
  306. L3DC:
  307.     addq    #1,d7
  308.     cmp    #4,d7
  309.     beq.s    L3EA
  310.     tst.b    4(a4)
  311.     bgt.s    L3EE
  312. L3EA:
  313.     clr    d7
  314.     move.l    (a4),a4
  315. L3EE:
  316.     move.l    a4,d0
  317.     beq.s    L40C
  318.     tst.b    4(a4)
  319.     ble.s    L3DC
  320.     move    d7,d0
  321.     ext.l    d0
  322.     asl.l    #4,d0
  323.     add.l    a4,d0
  324.     move.l    d0,a0
  325.     cmpi.l    #1,18(a0)
  326.     beq.s    L3DC
  327. L40C:
  328.     move.l    a4,d0
  329.     beq    L4B4
  330. L412:
  331.     tst    d7
  332.     beq.s    L3AE
  333. L416:
  334.     cmp.l    a5,a4
  335.     beq.s    L47A
  336.     move    d6,d0
  337.     ext.l    d0
  338.     asl.l    #4,d0
  339.     add.l    a5,d0
  340.     move.l    d0,(sp)
  341.     addq.l    #6,(sp)
  342.     move    d7,d0
  343.     ext.l    d0
  344.     asl.l    #4,d0
  345.     add.l    a4,d0
  346.     move.l    d0,-(sp)
  347.     addq.l    #6,(sp)
  348.     bsr    compact_block_sub
  349.     addq.l    #4,sp
  350.     move    d7,d0
  351.     ext.l    d0
  352.     asl.l    #4,d0
  353.     add.l    a4,d0
  354.     move.l    d0,a0
  355.     move.l    #1,18(a0)
  356. L44A:
  357.     addq    #1,d6
  358.     cmp    #4,d6
  359.     beq.s    L458
  360.     tst.b    4(a5)
  361.     bgt.s    L45C
  362. L458:
  363.     clr    d6
  364.     move.l    (a5),a5
  365. L45C:
  366.     move.l    a5,d0
  367.     beq.s    L47A
  368.     tst.b    4(a5)
  369.     ble.s    L44A
  370.     move    d6,d0
  371.     ext.l    d0
  372.     asl.l    #4,d0
  373.     add.l    a5,d0
  374.     move.l    d0,a0
  375.     cmpi.l    #1,18(a0)
  376.     bne.s    L44A
  377. L47A:
  378.     addq    #1,d7
  379.     cmp    #4,d7
  380.     beq.s    L488
  381.     tst.b    4(a4)
  382.     bgt.s    L48C
  383. L488:
  384.     clr    d7
  385.     move.l    (a4),a4
  386. L48C:
  387.     move.l    a4,d0
  388.     beq.s    L4AA
  389.     tst.b    4(a4)
  390.     ble.s    L47A
  391.     move    d7,d0
  392.     ext.l    d0
  393.     asl.l    #4,d0
  394.     add.l    a4,d0
  395.     move.l    d0,a0
  396.     cmpi.l    #1,18(a0)
  397.     beq.s    L47A
  398. L4AA:
  399.     move.l    a5,d0
  400.     beq.s    L4B4
  401.     move.l    a4,d0
  402.     bne    L33E
  403. L4B4:
  404.     tst.l    (sp)+
  405.     movem.l    (sp)+,d3-d7/a3-a5
  406.     unlk    a6
  407.     rts
  408. ;
  409. ;
  410. ;NB: fatal POOLFIX3 error in this subroutine  !!!
  411. ;NB: It may be called for ANY gemdos function following a RAM release
  412. ;NB: so at final gemdos exit all regs except d0/a0 must be restored
  413. ;NB: but d1 is used here, without protection either here or above
  414. ;NB: ONLY the 'Super' function has permission to do this !!!
  415. ;NB: This may BOMB any program expecting unchanged d1    !!!
  416. compact_block_sub:
  417.     link    a6,#-4
  418.     movem.l    d6-d7/a3-a5,-(sp)
  419.     move.l    8(a6),a5
  420.     clr    d7
  421.     bra.s    L4F4
  422. ;
  423. L4CE:
  424.     move    d7,a0
  425.     adda.l    a0,a0
  426.     adda.l    a0,a0
  427.     adda.l    #L694,a0
  428.     move.l    (a0),-4(a6)
  429.     move.l    -4(a6),a3
  430.     move.l    (a3),a4
  431.     bra.s    L4EE
  432. ;
  433. ;
  434. L4E6:
  435.     cmp.l    a5,a4
  436.     beq.s    L500
  437.     move.l    a4,a3
  438.     move.l    (a3),a4
  439. L4EE:
  440.     move.l    a4,d0
  441.     bne.s    L4E6
  442.     addq    #1,d7
  443. L4F4:
  444.     cmp    #2,d7
  445.     blt.s    L4CE
  446.     move    #1,d0
  447.     bra.s    L52A
  448. L500:
  449.     move.l    L69C(pc),a0
  450.     cmp.l    8(a0),a5
  451.     bne.s    L514
  452.     move.l    L69C(pc),a0
  453.     move.l    12(a6),8(a0)
  454. L514:
  455.     move.l    12(a6),a0
  456.     move.l    a5,a1
  457.     move    #7,d1        ;NB: ERROR d1 unprotected
  458. L51E:
  459.     move    (a1)+,(a0)+
  460.     dbf    d1,L51E        ;NB: ERROR d1 unprotected
  461.     move.l    12(a6),(a3)
  462.     clr    d0
  463. L52A:
  464.     tst.l    (sp)+
  465.     movem.l    (sp)+,d7-d7/a3-a5
  466.     unlk    a6
  467.     rts
  468. ;
  469. ;
  470. ;int    find_cookie(long id, void **ptr)
  471. find_cookie:
  472.     movem.l    d6-d7/a6-a6,-(sp)
  473.     move.l    16(sp),d6
  474.     move.l    20(sp),a6
  475.     moveq    #0,d7
  476.     move.l    #1,-(sp)
  477.     move    #Super&$ff,-(sp)
  478.     trap    #1
  479.     tst.l    d0
  480.     bne.s    L55E
  481.     clr.l    2(sp)
  482.     move    #Super&$ff,(sp)
  483.     trap    #1
  484.     move.l    d0,d7
  485. L55E:
  486.     addq.l    #6,sp
  487.     move.l    (_cookies).w,a0
  488.     move.l    a0,d0
  489.     beq.s    L580
  490. L568:
  491.     move.l    (a0),d0
  492.     cmp.l    d0,d6
  493.     beq.s    L576
  494.     tst.l    d0
  495.     beq.s    L580
  496.     addq.l    #8,a0
  497.     bra.s    L568
  498. ;
  499. L576:
  500.     move.l    a6,d0
  501.     beq.s    L57E
  502.     move.l    4(a0),(a6)
  503. L57E:
  504.     moveq    #1,d0
  505. L580:
  506.     move.l    d0,d6
  507.     tst.l    d7
  508.     beq.s    L590
  509.     gemdos    Super!_ind,d7
  510. L590:
  511.     move.l    d6,d0
  512.     movem.l    (sp)+,d6-d7/a6-a6
  513.     rts
  514. ;
  515. ;
  516. place_cookie:
  517.     link    a6,#0
  518.     move.l    d7,-(sp)
  519.     moveq    #1,d7
  520.     move.l    d7,-(sp)
  521.     moveq    #0,d7
  522.     move    #$20,-(sp)
  523.     trap    #1
  524.     tst.l    d0
  525.     bne.s    L5BA
  526.     clr.l    2(sp)
  527.     move    #$20,(sp)
  528.     trap    #1
  529.     move.l    d0,d7
  530. L5BA:
  531.     addq.l    #6,sp
  532.     move.l    (_cookie